package org.footballmanager.pandafootball.system.service;

import org.footballmanager.pandafootball.system.domain.FootPerson;
import org.footballmanager.pandafootball.system.domain.FootReward;
import org.footballmanager.pandafootball.system.domain.JsonReturn;
import org.footballmanager.pandafootball.system.form.impl.FootPersonSearchForm;
import org.springframework.ui.Model;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.Serializable;
import java.util.Date;
import java.util.List;

public interface FootPersonService extends BaseService<FootPerson> {
    /**
     * 导出球员信息
     *
     * @param path    路径
     * @param request 请求
     */
    void getExcel(byte[] path, HttpServletRequest request) throws IOException;

    /**
     * 导入SCard技能信息
     *
     * @param path    路径
     * @param request 请求
     */
    void getSCardExcel(byte[] path, HttpServletRequest request) throws IOException;

    /**
     * 导入PCard技能信息
     *
     * @param path    路径
     * @param request 请求
     */
    void getPCardExcel(byte[] path, HttpServletRequest request) throws IOException;

    /**
     * 删除所有球员
     *
     * @param request 请求
     */
    void deleteAll(HttpServletRequest request);

    /**
     * 找到所有对应球员
     *
     * @param from    评分从
     * @param to      评分到
     * @param userId  用户主键
     * @param request 请求
     * @return 球员名称
     */
    FootPerson findPersonByScore(String from, String to, Long userId, HttpServletRequest request);

    /**
     * 根据名称查询记录
     *
     * @param name 球员名称
     * @return 球员记录
     */
    FootPerson findByName(String name);

    /**
     * 翻页方法
     *
     * @param footPersonSearchForm 条件
     * @return 列表
     */
    List<FootPerson> findall(FootPersonSearchForm footPersonSearchForm);

    /**
     * 根据球员编码查找球员
     *
     * @param qybm 球员编码
     * @return 球员信息
     */
    FootPerson findByQybm(String qybm);

    /**
     * 根据主键获取记录
     *
     * @param id 主键
     * @return 记录
     */
    FootPerson get(Serializable id);

    /**
     * 根据等级主键获取球员列表
     *
     * @param djId 等级主键
     * @return 球员列表
     */
    List<FootPerson> findByDjId(Long djId);

    /**
     * 查询
     *
     * @param entityname           实体类名
     * @param map                  参数
     * @param footPersonSearchForm 条件
     */
    void search(String entityname, Model map, FootPersonSearchForm footPersonSearchForm);

    /**
     * 初始化
     *
     * @param entityname           实体类名
     * @param footPersonSearchForm 条件
     * @param map                  参数
     */
    void init(String entityname, FootPersonSearchForm footPersonSearchForm, Model map);

    /**
     * 删除所有
     *
     * @param footPersonSearchForm 条件
     * @param request              请求
     */
    void deleteAll(FootPersonSearchForm footPersonSearchForm, HttpServletRequest request);

    /**
     * 导出
     *
     * @param request  请求
     * @param response 响应
     */
    void exprot(HttpServletRequest request, HttpServletResponse response);

    /**
     * 更新数据
     *
     * @param id      主键
     * @param ssjlb   球队主键
     * @param sr      生日
     * @param grjj    个人简介
     * @param zyjx    重要奖项
     * @param hm      还没
     * @param request 请求
     * @return Json返回值
     */
    JsonReturn edit(Long id, Long ssjlb, Date sr, String grjj, String zyjx, Integer hm, HttpServletRequest request);

    /**
     * 非物理删除
     *
     * @param id 主键
     */
    void deleteForReal(Long id);

    /**
     * 重新计算等级
     */
    void resetDj();

    /**
     * 根据机率获取球员
     *
     * @param userId 用户主键
     * @param reward 机率设置类
     * @param request 请求
     * @return 球员信息
     */
    FootPerson findQyByOdds(Long userId, FootReward reward, HttpServletRequest request);

    /**
     * 根据djId获取球员
     * @param userId 用户主键
     * @param djId 等级主键
     * @param request 请求
     * @return 球员信息
     */
    FootPerson getDjQy(Long userId, Long djId, HttpServletRequest request);
}